package ic

// Options 统一的转换选项
type Options struct {
	Quality   int                    // 质量 1-100
	Speed     int                    // 编码速度 1-10
	Lossless  bool                   // 是否无损
	Compress  int                    // 压缩级别 0-9
	NumColors int                    // 颜色数量（GIF等）
	Custom    map[string]interface{} // 自定义参数
}

// DefaultOptions 创建默认选项
func DefaultOptions() Options {
	return Options{
		Quality:   80,
		Speed:     6,
		Lossless:  false,
		Compress:  6,
		NumColors: 256,
		Custom:    make(map[string]interface{}),
	}
}

// MergeOptions 合并选项，后面的选项会覆盖前面的
func MergeOptions(options ...Options) Options {
	if len(options) == 0 {
		return DefaultOptions()
	}

	result := DefaultOptions()

	for _, opt := range options {
		if opt.Quality > 0 {
			result.Quality = opt.Quality
		}
		if opt.Speed > 0 {
			result.Speed = opt.Speed
		}
		result.Lossless = opt.Lossless
		if opt.Compress > 0 {
			result.Compress = opt.Compress
		}
		if opt.NumColors > 0 {
			result.NumColors = opt.NumColors
		}
		// 合并自定义参数
		for k, v := range opt.Custom {
			result.Custom[k] = v
		}
	}

	return result
}
